// 主题工具函数

import { Appearance, Platform } from 'react-native';
import { THEME_MODE } from './constants';

/**
 * 获取系统主题模式
 * @returns {'light' | 'dark'}
 */
export const getSystemTheme = () => {
  if (Platform.OS === 'web') {
    // Web 平台检测系统主题
    if (typeof window !== 'undefined' && window.matchMedia) {
      return window.matchMedia('(prefers-color-scheme: dark)').matches
        ? 'dark'
        : 'light';
    }
    return 'light';
  }
  // 移动端使用 Appearance API
  return Appearance.getColorScheme() || 'light';
};

/**
 * 根据时间判断是否为深色模式
 * 6:00-18:00 为浅色，18:00-次日6:00 为深色
 * @returns {boolean} 是否为深色模式
 */
export const isDarkByTime = () => {
  const now = new Date();
  const hours = now.getHours();
  // 18:00-23:59 或 0:00-5:59 为深色
  return hours >= 18 || hours < 6;
};

/**
 * 获取当前季节
 * @returns {'spring' | 'summer' | 'autumn' | 'winter'}
 */
export const getCurrentSeason = () => {
  const now = new Date();
  const month = now.getMonth() + 1; // 1-12

  // 春季：3月-5月
  if (month >= 3 && month <= 5) {
    return 'spring';
  }
  // 夏季：6月-8月
  if (month >= 6 && month <= 8) {
    return 'summer';
  }
  // 秋季：9月-11月
  if (month >= 9 && month <= 11) {
    return 'autumn';
  }
  // 冬季：12月-2月
  return 'winter';
};

/**
 * 根据主题模式获取实际的主题值
 * @param {string} themeMode - 主题模式：'light' | 'dark' | 'auto' | 'time'
 * @returns {'light' | 'dark'}
 */
export const getActualTheme = (themeMode) => {
  switch (themeMode) {
    case THEME_MODE.LIGHT:
      return 'light';
    case THEME_MODE.DARK:
      return 'dark';
    case THEME_MODE.AUTO:
      return getSystemTheme();
    case 'time': // 根据时间自动切换
      return isDarkByTime() ? 'dark' : 'light';
    default:
      return 'light';
  }
};

/**
 * 监听系统主题变化
 * @param {Function} callback - 回调函数
 * @returns {Function} 取消监听的函数
 */
export const subscribeToSystemTheme = (callback) => {
  if (Platform.OS === 'web') {
    if (typeof window !== 'undefined' && window.matchMedia) {
      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
      const handler = (e) => callback(e.matches ? 'dark' : 'light');
      
      // 使用 addEventListener（现代浏览器）
      if (mediaQuery.addEventListener) {
        mediaQuery.addEventListener('change', handler);
        return () => mediaQuery.removeEventListener('change', handler);
      }
      // 兼容旧浏览器
      if (mediaQuery.addListener) {
        mediaQuery.addListener(handler);
        return () => mediaQuery.removeListener(handler);
      }
    }
    return () => {};
  }
  
  // 移动端使用 Appearance API
  return Appearance.addChangeListener(({ colorScheme }) => {
    callback(colorScheme || 'light');
  });
};

